
#ifndef _EMS_TO_TEMS_DRIVE_H
#define _EMS_TO_TEMS_DRIVE_H

u16 QDLS=0;

//const u16 MBQD_PWM[]={10,100,600,1200,1800,2400,2400};//

const u16 MBQD_PWM[]={10,100,600,1200,1800,8000,2400};//

const u16 QTQD_PWM[]={10,400,1400,2400,3400,4400,4400};//其他部位的强度

u8 EMS_Type_Chang_Flag=0;//判断是否需要开启放电使用的1开启，0关闭
u8 LS_MODE=0;
u8 Buzzer_Ci=0,QD_Data_Type=0;
u16 Buzzer_100ms_ID=0,EMS_FD_500ms_TO_OFF_ID;
u32 ZQ_LONG=0;//计算中的波形时长使用的单位为100us
u8 EMS_OUT_TO_100HZ_FLAG=0;//判断是否输出100Hz的频率
u8 EMS_OUT_TO_100HZ_Ci=0;//控制次数使用的
extern u8 PWM_Type,PWM_Type_Ci,PWM_ON_Ture,Power_PWM_Ture,SYS_Flag,PWM_Type_NOW,PWM_Type0_Delay500ms;
extern u16 PW_Cnt,PWM_IN_CI;
extern u32 SP_Cnt;
u8 LS_TYPE=10;

u8 TYPE1_Ci=0;//记录判断的位置使用的

 //乐范版本的强度控制
 //const u16  LF_POWER_PWM_QDX4[]={0,4,8,16,36,48,64,84,108,128,160,180,200,216,240,264,288,308,348,360,388,388};


 //乐范版本的强度控制原始的
 //const u8  LF_POWER_PWM_QD[]={0,2,4,8,18,24,32,42,54,64,80,90,100,108,120,132,144,154,174,180,194,194};
 //const u8  LF_POWER_PWM_QD[]={0,2,4,7,10,15,21,29,36,45,55,66,80,92,105,118,132,154,174,180,194,194};

 //2022.10.25调整强度后的 由于受到升压方式的影响这个强度波形不能超过75模式4的值就是超过了造成后面的频率不对
 //const u8  LF_POWER_PWM_QD[]= {0,2,3,5,8,11,15,20,27,32,37,45,52,61,71,82,95,95,95,95,95,95};
   //const u8  LF_POWER_PWM_QD[]= {0,1,2,3,4,5,7,10,14,16,18,22,26,31,36,42,48,48,48,48,48,48};
 u16 LF_POWER_PWM_QD_NEW=1;//只有0,3,5,8,12,15//有效
 //const u8  LF_POWER_PWM_QD[]= {0,1,2,3,4,5,7,10,14,16,18,22,26,30,34,38,42,42,48,48,48,48};//20230729前的16档强度模式
 //const u8  LF_POWER_PWM_QD[]= {0,1,3,5,10,16,21,27,32,37,42,42,42,42,42,42,42,42,48,48,48,48};//20230729的改为10档强度模式版本
 const u8  LF_POWER_PWM_QDX12[]={0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48};//20230729的改为10档强度模式版本


//旧版原始的
const u16 LF_POWER_PWM_QDNEW_OLD[6][22]={
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式1
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式2
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式3
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式4
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式5
	{0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式预留
};

//做了微调后的版本
 const u16 LF_POWER_PWM_QDNEW[6][22]={
	 {0,1,2,4,6,9,12,16,22,28,32,38,38,42,42,42,42,42,48,48,48,48},//模式1
	 {0,1,2,4,6,9,12,16,22,28,32,38,38,42,42,42,42,42,48,48,48,48},//模式2
	 {0,1,2,4,5,8,11,16,21,27,36,38,38,42,42,42,42,42,48,48,48,48},//模式3
	 {0,1,2,4,5,7,11,16,20,26,32,38,38,42,42,42,42,42,48,48,48,48},//模式4
	 {0,1,2,3,5,7,10,13,17,21,26,38,38,42,42,42,42,42,48,48,48,48},//模式5
	 {0,1,3,5,10,16,20,24,28,32,38,38,38,42,42,42,42,42,48,48,48,48},//模式预留
 };


 //const u8  LF_POWER_PWM_QD3[]={0,2,3,5,8,11,15,20,27,32,37,45,52,60,66,72,78,95,95,95,95,95};

///*
 //SP驱动中断 100us进来一次，SP1和SP11控制到HGND，SP2和SP22控制到HVCC，2和22不能同时开，1和11同时开就是放电了
 ___interrupt
 AT_VOLATILE_RAM_CODE
 static void timer2_isr()
 {
   static u32 ZQ_Longs=0,ZQ=0,ZQ_BUFF=0;
   static u16 Por_PWM_Ci=0,POWER_Ci=0;
   u32 LSData1,LSData2;
   u16 LSPWM;
   u8 LSMK=0;
   clr_wdt();
   JL_TIMER2->CON |= BIT(14);//先清除中断才能是按设置的时间，如果在后面清中断的话就超前一倍了

   if(SYS_Flag==1)//只有开机的情况下有效
   {
      ZQ_LONG++;
      if(EMS_Type_Chang_Flag==1)//需要开启放电
      {
        if(ZQ_LONG==1)
        {
          Power_PWM_OFF(); //关闭脉冲输出
          FD_ON();
          SP22_OFF();
          SP11_OFF();
          SP2_ON();
          SP1_ON();
        }
        else if(ZQ_LONG>=5000)//开启放电5S
        {
           FD_OFF();
           SP2_OFF();
           SP1_OFF();
           SP22_OFF();
           SP11_OFF();
           EMS_OUT_TO_100HZ_FLAG=0;
           EMS_OUT_TO_100HZ_Ci=0;
           ZQ_LONG=0;
           ZQ=0;
           ZQ_BUFF=0;
           EMS_Type_Chang_Flag=0;
           TYPE1_Ci=0;
        }
      }
      else//正常波形使用的
      {
          ZQ++;
          if(ZQ==1)
          {
             POWER_Ci=0;
             ZQ_BUFF=0;//初步怀疑这个值没有清除造成的
             Por_PWM_Ci=0;
             Power_PWM_Ture=1;
             Power_PWM_ON(); //开启脉冲输出
          }
          else
          {
             if(Power_PWM_Ture==0)//升压结束
             {
               if(POWER_Ci<2)//第一组SP数据
               {
                   LSMK=2;//脉宽为100us
                   if(ZQ==ZQ_BUFF+1)//延时900us到了开第一组SP(9)
                   {
                     SP1_ON();//开HGND
                     SP2_ON();//开高压
                   }
                   else if(ZQ==ZQ_BUFF+LSMK)//延时200us到了关第一组SP(11)
                   {
                     if(LJ_PD_IN()!=0)//判断已经离机了
                     {
                         PWM_IN_CI++;
                         if(PWM_IN_CI>5) PWM_IN_CI=5;
                     }
                     else
                     {
                         PWM_IN_CI=0;
                     }
                     SP2_OFF();//关高压
                   }
                   else if(ZQ==ZQ_BUFF+LSMK+1)//延时100us到了开放电(12)
                   {
                     SP11_ON();//开HGND
                   }
                   else if(ZQ==ZQ_BUFF+LSMK+5)//延时400us到了关放电(16)
                   {
                     SP1_OFF();//关HGND
                     SP11_OFF();//关HGND
                   }
                   else if(ZQ==ZQ_BUFF+LSMK+8)//延时1.1ms到了需要开启第二组数据(27)19
                   {
                      if((EMS_OUT_TO_100HZ_FLAG==1)&&(EMS_OUT_TO_100HZ_Ci<2))//1000Hz的输出
                      {
                        EMS_OUT_TO_100HZ_Ci++;
                        ZQ_BUFF=ZQ;//暂存缓存数据
                      }
                      else
                      {
                         Por_PWM_Ci=0;
                         Power_PWM_Ture=1;
                         Power_PWM_ON(); //开启脉冲输出
                         EMS_OUT_TO_100HZ_Ci=0;
                      }
                   }
               }
               else if(POWER_Ci==2)//第二组SP数据
               {
                  LSMK=2;//脉宽为100us
                  if(ZQ==ZQ_BUFF+1)//延时700us到了开第一组SP(7)
                  {
                    SP11_ON();
                    SP22_ON();
                  }
                  else if(ZQ==ZQ_BUFF+LSMK)//延时200us到了关第一组SP(9)
                  {
                    SP22_OFF();
                  }
                  else if(ZQ==ZQ_BUFF+LSMK+1)//延时100us到了开放电(10)
                  {
                    SP1_ON();
                  }
                  else if(ZQ==ZQ_BUFF+LSMK+5)//延时400us到了关放电(14)
                  {
                    SP1_OFF();
                    SP11_OFF();
                  }
                  else if(ZQ==ZQ_BUFF+LSMK+8)//延时1ms到了需要开启第二组数据 在这个范围内是安全的(17)
                  {
                     if((EMS_OUT_TO_100HZ_FLAG==1)&&(EMS_OUT_TO_100HZ_Ci<2))//1000Hz的输出
                      {
                        EMS_OUT_TO_100HZ_Ci++;
                        ZQ_BUFF=ZQ;//暂存缓存数据
                      }
                      else
                      {
                        EMS_OUT_TO_100HZ_Ci=0;
                        POWER_Ci=3;
                      }
                  }
               }
               else//判断什么是否终止波形
               {
                   //////////////////20230914 V3版本的模式改版备份///////////////////////
                   //10000代表1s
                   if(PWM_Type==0)
                   {//20HZ运行4S，1000Hz运行1S，5Hz运行4S，停止1S
                       if(ZQ_LONG<40000)//5Hz持续时长4S
                       {
                         if(ZQ>=500)//20Hz
                         {
                           ZQ=0;
                         }
                       }
                       else if(ZQ_LONG<50000)//1000Hz持续时长1S
                       {
                           EMS_OUT_TO_100HZ_FLAG=1;//开启
                           EMS_OUT_TO_100HZ_Ci=0;
                           if(ZQ>=500)//20Hz
                           {
                               ZQ=0;
                           }
                       }
                       else if(ZQ_LONG<90000)//5Hz持续时长4S
                       {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         if(ZQ>=2000)//5Hz
                         {
                           ZQ=0;
                         }
                       }
                       else if(ZQ_LONG>=100000)//停1S复位
                       {
                           EMS_OUT_TO_100HZ_FLAG=0;//开启
                           EMS_OUT_TO_100HZ_Ci=0;
                           ZQ=0;
                           ZQ_LONG=0;
                       }
                   }
                   else if(PWM_Type==1)
                   {//80HZ运行4S，1000Hz运行1S，5Hz运行2S，1000Hz运行1S，20Hz运行2S，停止1S
                        if(ZQ_LONG<40000)//80Hz持续时长4S
                       {
                         if(ZQ>=125)//80Hz
                         {
                           ZQ=0;
                         }
                       }
                       else if(ZQ_LONG<50000)//1000Hz持续时长1S
                       {
                           EMS_OUT_TO_100HZ_FLAG=1;//开启
                           EMS_OUT_TO_100HZ_Ci=0;
                           if(ZQ>=125)//80Hz
                           {
                               ZQ=0;
                           }
                       }
                       else if(ZQ_LONG<70000)//5Hz持续时长2S
                       {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         if(ZQ>=2000)//5Hz
                         {
                           ZQ=0;
                         }
                       }
                      else if(ZQ_LONG<80000)//1000Hz持续时长1S
                      {
                         EMS_OUT_TO_100HZ_FLAG=1;//开启
                         EMS_OUT_TO_100HZ_Ci=0;
                         if(ZQ>=2000)//5Hz
                         {
                             ZQ=0;
                         }
                      }
                      else if(ZQ_LONG<100000)//20Hz持续时长2S
                     {
                        EMS_OUT_TO_100HZ_FLAG=0;//开启
                        if(ZQ>=500)//20Hz
                        {
                           ZQ=0;
                        }
                     }
                     else if(ZQ_LONG>=110000)//停1S复位
                     {
                        EMS_OUT_TO_100HZ_FLAG=0;//开启
                        EMS_OUT_TO_100HZ_Ci=0;
                        ZQ=0;
                        ZQ_LONG=0;
                     }
                   }
                   else if(PWM_Type==2)
                   {//5HZ运行4S，1000Hz运行1S，5Hz运行6S，1000Hz运行1S，5Hz运行8S，停止1S
                        if(ZQ_LONG<40000)//5Hz持续时长4S
                        {
                          if(ZQ>=2000)//5Hz
                          {
                            ZQ=0;
                          }
                        }
                        else if(ZQ_LONG<50000)//1000Hz持续时长1S
                        {
                            EMS_OUT_TO_100HZ_FLAG=1;//开启
                            EMS_OUT_TO_100HZ_Ci=0;
                            if(ZQ>=2000)//5Hz
                            {
                                ZQ=0;
                            }
                        }
                        else if(ZQ_LONG<110000)//5Hz持续时长6S
                        {
                          EMS_OUT_TO_100HZ_FLAG=0;//开启
                          if(ZQ>=2000)//5Hz
                          {
                            ZQ=0;
                          }
                        }
                       else if(ZQ_LONG<120000)//1000Hz持续时长1S
                       {
                          EMS_OUT_TO_100HZ_FLAG=1;//开启
                          EMS_OUT_TO_100HZ_Ci=0;
                          if(ZQ>=2000)//5Hz
                          {
                              ZQ=0;
                          }
                       }
                       else if(ZQ_LONG<200000)//5Hz持续时长8S
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         if(ZQ>=2000)//5Hz
                         {
                            ZQ=0;
                         }
                      }
                      else if(ZQ_LONG>=210000)//停1S复位
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         EMS_OUT_TO_100HZ_Ci=0;
                         ZQ=0;
                         ZQ_LONG=0;
                      }
                   }
                   else if(PWM_Type==3)
                   {//20HZ运行4S，1000Hz运行1S，80Hz运行4S，停止1S
                        if(ZQ_LONG<40000)//20Hz持续时长4S
                        {
                          if(ZQ>=500)//20Hz
                          {
                            ZQ=0;
                          }
                        }
                        else if(ZQ_LONG<50000)//1000Hz持续时长1S
                        {
                            EMS_OUT_TO_100HZ_FLAG=1;//开启
                            EMS_OUT_TO_100HZ_Ci=0;
                            if(ZQ>=500)//20Hz
                            {
                                ZQ=0;
                            }
                        }
                        else if(ZQ_LONG<90000)//80Hz持续时长4S
                        {
                          EMS_OUT_TO_100HZ_FLAG=0;//开启
                          if(ZQ>=125)//80Hz
                          {
                            ZQ=0;
                          }
                        }
                      else if(ZQ_LONG>=100000)//停1S复位
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         EMS_OUT_TO_100HZ_Ci=0;
                         ZQ=0;
                         ZQ_LONG=0;
                      }
                   }
                   else if(PWM_Type==4)
                   {//80HZ运行4S，1000Hz运行1S，20Hz运行4S，1000Hz运行1S，80Hz运行4S，1000Hz运行1S，5Hz运行4S，停止1S
                        if(ZQ_LONG<40000)//80Hz持续时长4S
                        {
                          if(ZQ>=125)//80Hz
                          {
                            ZQ=0;
                          }
                        }
                        else if(ZQ_LONG<50000)//1000Hz持续时长1S
                        {
                            EMS_OUT_TO_100HZ_FLAG=1;//开启
                            EMS_OUT_TO_100HZ_Ci=0;
                            if(ZQ>=125)//80Hz
                            {
                                ZQ=0;
                            }
                        }
                        else if(ZQ_LONG<90000)//20Hz持续时长4S
                        {
                          EMS_OUT_TO_100HZ_FLAG=0;//开启
                          if(ZQ>=500)//20Hz
                          {
                            ZQ=0;
                          }
                        }
                       else if(ZQ_LONG<100000)//1000Hz持续时长1S
                       {
                          EMS_OUT_TO_100HZ_FLAG=1;//开启
                          EMS_OUT_TO_100HZ_Ci=0;
                          if(ZQ>=500)//20Hz
                          {
                              ZQ=0;
                          }
                       }
                      else if(ZQ_LONG<140000)//80Hz持续时长4S
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         if(ZQ>=125)//80Hz
                         {
                            ZQ=0;
                         }
                      }
                      else if(ZQ_LONG<150000)//1000Hz持续时长1S
                      {
                          EMS_OUT_TO_100HZ_FLAG=1;//开启
                          EMS_OUT_TO_100HZ_Ci=0;
                          if(ZQ>=125)//80Hz
                          {
                              ZQ=0;
                          }
                      }
                      else if(ZQ_LONG<190000)//5Hz持续时长4S
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         if(ZQ>=2000)//5Hz
                         {
                            ZQ=0;
                         }
                      }
                      else if(ZQ_LONG>=200000)//停1S复位
                      {
                         EMS_OUT_TO_100HZ_FLAG=0;//开启
                         EMS_OUT_TO_100HZ_Ci=0;
                         ZQ=0;
                         ZQ_LONG=0;
                      }

                  }
               }
             }
          }

         if(Power_PWM_Ture==1)//控制升压使用的
         {
           Por_PWM_Ci++;
           if(Por_PWM_Ci>=LF_POWER_PWM_QD_NEW) //LF_POWER_PWM_QD[QD_Data_Type])//强度在这里控制了
           {
             Por_PWM_Ci=0;
             Power_PWM_Ture=0;
             Power_PWM_OFF(); //关闭脉冲输出
             ZQ_BUFF=ZQ;//暂存缓存数据
             POWER_Ci++;
           }
         }
         else
         {
           Power_PWM_OFF(); //关闭脉冲输出
         }
     }
   }
   else
   {
     ZQ=0;
     ZQ_LONG=0;
     Power_PWM_OFF(); //关闭脉冲输出
   }
 }
 //*/
 /// */
/*************************2023823  V2版本改版的模式备份**********************************************
//10000代表1s
               if(PWM_Type==0)
               {//5HZ运行4S，1000Hz运行1S，20Hz运行4S，停止1S
                   if(ZQ_LONG<40000)//5Hz持续时长4S
                   {
                     if(ZQ>=2000)//5Hz
                     {
                       ZQ=0;
                     }
                   }
                   else if(ZQ_LONG<50000)//1000Hz持续时长1S
                   {
                       EMS_OUT_TO_100HZ_FLAG=1;//开启
                       EMS_OUT_TO_100HZ_Ci=0;
                       if(ZQ>=2000)//5Hz
                       {
                           ZQ=0;
                       }
                   }
                   else if(ZQ_LONG<90000)//20Hz持续时长4S
                   {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     if(ZQ>=500)//20Hz
                     {
                       ZQ=0;
                     }
                   }
                   else if(ZQ_LONG>=100000)//停1S复位
                   {
                       EMS_OUT_TO_100HZ_FLAG=0;//开启
                       EMS_OUT_TO_100HZ_Ci=0;
                       ZQ=0;
                       ZQ_LONG=0;
                   }
               }
               else if(PWM_Type==1)
               {//5HZ运行2S，1000Hz运行1S，20Hz运行2S，1000Hz运行1S，80Hz运行4S，停止1S
                    if(ZQ_LONG<20000)//5Hz持续时长2S
                   {
                     if(ZQ>=2000)//5Hz
                     {
                       ZQ=0;
                     }
                   }
                   else if(ZQ_LONG<30000)//1000Hz持续时长1S
                   {
                       EMS_OUT_TO_100HZ_FLAG=1;//开启
                       EMS_OUT_TO_100HZ_Ci=0;
                       if(ZQ>=2000)//5Hz
                       {
                           ZQ=0;
                       }
                   }
                   else if(ZQ_LONG<50000)//20Hz持续时长2S
                   {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     if(ZQ>=500)//20Hz
                     {
                       ZQ=0;
                     }
                   }
                  else if(ZQ_LONG<60000)//1000Hz持续时长1S
                  {
                     EMS_OUT_TO_100HZ_FLAG=1;//开启
                     EMS_OUT_TO_100HZ_Ci=0;
                     if(ZQ>=500)//20Hz
                     {
                         ZQ=0;
                     }
                  }
                  else if(ZQ_LONG<100000)//80Hz持续时长4S
                 {
                    EMS_OUT_TO_100HZ_FLAG=0;//开启
                    if(ZQ>=125)//80Hz
                    {
                       ZQ=0;
                    }
                 }
                 else if(ZQ_LONG>=110000)//停1S复位
                 {
                    EMS_OUT_TO_100HZ_FLAG=0;//开启
                    EMS_OUT_TO_100HZ_Ci=0;
                    ZQ=0;
                    ZQ_LONG=0;
                 }
               }
               else if(PWM_Type==2)
               {//5HZ运行4S，1000Hz运行1S，5Hz运行6S，1000Hz运行1S，5Hz运行8S，停止1S
                    if(ZQ_LONG<40000)//5Hz持续时长4S
                    {
                      if(ZQ>=2000)//5Hz
                      {
                        ZQ=0;
                      }
                    }
                    else if(ZQ_LONG<50000)//1000Hz持续时长1S
                    {
                        EMS_OUT_TO_100HZ_FLAG=1;//开启
                        EMS_OUT_TO_100HZ_Ci=0;
                        if(ZQ>=2000)//5Hz
                        {
                            ZQ=0;
                        }
                    }
                    else if(ZQ_LONG<110000)//5Hz持续时长6S
                    {
                      EMS_OUT_TO_100HZ_FLAG=0;//开启
                      if(ZQ>=2000)//5Hz
                      {
                        ZQ=0;
                      }
                    }
                   else if(ZQ_LONG<120000)//1000Hz持续时长1S
                   {
                      EMS_OUT_TO_100HZ_FLAG=1;//开启
                      EMS_OUT_TO_100HZ_Ci=0;
                      if(ZQ>=2000)//5Hz
                      {
                          ZQ=0;
                      }
                   }
                   else if(ZQ_LONG<200000)//5Hz持续时长8S
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     if(ZQ>=2000)//5Hz
                     {
                        ZQ=0;
                     }
                  }
                  else if(ZQ_LONG>=210000)//停1S复位
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     EMS_OUT_TO_100HZ_Ci=0;
                     ZQ=0;
                     ZQ_LONG=0;
                  }
               }
               else if(PWM_Type==3)
               {//20HZ运行4S，1000Hz运行1S，80Hz运行4S，停止1S
                    if(ZQ_LONG<40000)//20Hz持续时长4S
                    {
                      if(ZQ>=500)//20Hz
                      {
                        ZQ=0;
                      }
                    }
                    else if(ZQ_LONG<50000)//1000Hz持续时长1S
                    {
                        EMS_OUT_TO_100HZ_FLAG=1;//开启
                        EMS_OUT_TO_100HZ_Ci=0;
                        if(ZQ>=500)//20Hz
                        {
                            ZQ=0;
                        }
                    }
                    else if(ZQ_LONG<90000)//80Hz持续时长4S
                    {
                      EMS_OUT_TO_100HZ_FLAG=0;//开启
                      if(ZQ>=125)//80Hz
                      {
                        ZQ=0;
                      }
                    }
                  else if(ZQ_LONG>=100000)//停1S复位
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     EMS_OUT_TO_100HZ_Ci=0;
                     ZQ=0;
                     ZQ_LONG=0;
                  }
               }
               else if(PWM_Type==4)
               {//5HZ运行4S，1000Hz运行1S，80Hz运行4S，1000Hz运行1S，20Hz运行4S，1000Hz运行1S，80Hz运行4S，停止1S
                    if(ZQ_LONG<40000)//5Hz持续时长4S
                    {
                      if(ZQ>=2000)//5Hz
                      {
                        ZQ=0;
                      }
                    }
                    else if(ZQ_LONG<50000)//1000Hz持续时长1S
                    {
                        EMS_OUT_TO_100HZ_FLAG=1;//开启
                        EMS_OUT_TO_100HZ_Ci=0;
                        if(ZQ>=2000)//5Hz
                        {
                            ZQ=0;
                        }
                    }
                    else if(ZQ_LONG<90000)//80Hz持续时长4S
                    {
                      EMS_OUT_TO_100HZ_FLAG=0;//开启
                      if(ZQ>=125)//80Hz
                      {
                        ZQ=0;
                      }
                    }
                   else if(ZQ_LONG<100000)//1000Hz持续时长1S
                   {
                      EMS_OUT_TO_100HZ_FLAG=1;//开启
                      EMS_OUT_TO_100HZ_Ci=0;
                      if(ZQ>=125)//80Hz
                      {
                          ZQ=0;
                      }
                   }
                  else if(ZQ_LONG<140000)//20Hz持续时长4S
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     if(ZQ>=500)//20Hz
                     {
                        ZQ=0;
                     }
                  }
                  else if(ZQ_LONG<150000)//1000Hz持续时长1S
                  {
                      EMS_OUT_TO_100HZ_FLAG=1;//开启
                      EMS_OUT_TO_100HZ_Ci=0;
                      if(ZQ>=500)//20Hz
                      {
                          ZQ=0;
                      }
                  }
                  else if(ZQ_LONG<190000)//80Hz持续时长4S
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     if(ZQ>=125)//80Hz
                     {
                        ZQ=0;
                     }
                  }
                  else if(ZQ_LONG>=200000)//停1S复位
                  {
                     EMS_OUT_TO_100HZ_FLAG=0;//开启
                     EMS_OUT_TO_100HZ_Ci=0;
                     ZQ=0;
                     ZQ_LONG=0;
                  }

              }
           }
//   *////
/*************************2023.08.25 之前改模式的模式备份V1的改版备份
if(PWM_Type==0)
{//10000代表1ms
    if(ZQ_LONG<40000)//20Hz持续时长4S
    {
      if(ZQ>=500)//20Hz
      {
        ZQ=0;
      }
    }
    else if(ZQ_LONG<50000)//停1S
    {
        ZQ=10;//ZQ=0时会重新开启输出，如果改为10，重新初始化就不输出波形了
    }
    else if(ZQ_LONG<100000)//80Hz持续时长5S
    {
      if(ZQ>=125)//80Hz
      {
        ZQ=0;
      }
    }
    else if(ZQ_LONG>=110000)//停1S复位
    {
        ZQ=0;
        ZQ_LONG=0;
    }
}
//由5Hz开始，在6s内线性增加至20Hz后，按20Hz运行2S，在按1000Hz调制波形运行1S，在按20Hz运行2S，暂停1s 然后重新回到5Hz开始，依次循环至结束。
else if(PWM_Type==1)
{
      if(ZQ_LONG<60000)//开头的6S 线性增加使用的 20-5-1=14
      {
         LSData1=(TYPE1_Ci+1)*4000;
         if(ZQ_LONG<LSData1)//时长控制使用的
         {
           LSData2=10000/((ZQ_LONG/4000)+5);
           if(ZQ>=LSData2)//控制输出频率使用的
           {
             ZQ=0;
           }
         }
         else if(ZQ_LONG>=LSData1)//时长控制使用的
         {
            ZQ=0;
            TYPE1_Ci++;
            if(TYPE1_Ci>14)//总共15组计算为15-1
            {
              TYPE1_Ci=0;
            }
         }
      }
      else
      {
         if(ZQ_LONG<80000)//开2S 20Hz
         {
            if(ZQ>=500)//20Hz
            {
              ZQ=0;
            }
         }
         else if(ZQ_LONG<90000)//开1S调整1000HZ
         {
            EMS_OUT_TO_100HZ_FLAG=1;//开启
            EMS_OUT_TO_100HZ_Ci=0;
            if(ZQ>=500)//20Hz
            {
              ZQ=0;
            }
         }
         else if(ZQ_LONG<110000)//开2S 20Hz
         {
            EMS_OUT_TO_100HZ_FLAG=0;//关闭
            if(ZQ>=500)//20Hz
            {
              ZQ=0;
            }
         }
         else if(ZQ_LONG>=120000)//停1S
         {
            ZQ=0;
            EMS_OUT_TO_100HZ_FLAG=0;//关启
            EMS_OUT_TO_100HZ_Ci=0;
            ZQ_LONG=0;//从头开始
         }
      }
}
//由5Hz开始运行15S，在按1000Hz调制波形运行1S，接着5Hz开始运行15S，暂停2s然后重新回到5Hz开始，依次循环至结束。
else if(PWM_Type==2)
{
   if(ZQ_LONG<150000)//15S 5Hz
   {
      if(ZQ>=2000)//5Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG<160000)//1S 1000Hz
   {
      EMS_OUT_TO_100HZ_FLAG=1;//开启
      EMS_OUT_TO_100HZ_Ci=0;
      if(ZQ>=2000)//5Hz
      {
        ZQ=0;
      }
   }
   else  if(ZQ_LONG<310000)//15S 5Hz
   {
      EMS_OUT_TO_100HZ_FLAG=0;//开启
      if(ZQ>=2000)//5Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG>=330000)//停2S
   {
      ZQ=0;
      EMS_OUT_TO_100HZ_FLAG=0;//开启
      EMS_OUT_TO_100HZ_Ci=0;
      ZQ_LONG=0;//100000;//屏蔽开头的10S线性升压过程
   }
}
//由5Hz开始持续5S，20Hz持续2S,1000Hz持续1S，20Hz持续2S，5Hz持续5S，暂停1s然后重新回到5Hz开始，依次循环至结束。
else if(PWM_Type==3)
{
   if(ZQ_LONG<50000)//5S 5Hz
   {
      if(ZQ>=2000)//5Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG<70000)//2S 20Hz
   {
      if(ZQ>=500)//20Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG<80000)//1S 20Hz 1000Hz
   {
      EMS_OUT_TO_100HZ_FLAG=1;//开启
      EMS_OUT_TO_100HZ_Ci=0;
      if(ZQ>=500)//20Hz
      {
        ZQ=0;
      }
   }
   else  if(ZQ_LONG<100000)//2S 20Hz
   {
      EMS_OUT_TO_100HZ_FLAG=0;//开启
      if(ZQ>=500)//20Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG<150000)//5S 5Hz
   {
      if(ZQ>=2000)//5Hz
      {
        ZQ=0;
      }
   }
   else if(ZQ_LONG>=160000)//停1S
   {
      ZQ=0;
      EMS_OUT_TO_100HZ_FLAG=0;//开启
      EMS_OUT_TO_100HZ_Ci=0;
      ZQ_LONG=0;//100000;//屏蔽开头的10S线性升压过程
   }
}
//由20Hz开始持续2S,1000Hz持续1S，20Hz持续2S，暂停1s然后重新回到20Hz开始，依次循环至结束。
else if(PWM_Type==4)
{
  if(ZQ_LONG<50000)//5S 20Hz
  {
     if(ZQ>=500)//20Hz
     {
       ZQ=0;
     }
  }
  else if(ZQ_LONG<60000)//1S 20Hz 1000Hz
  {
     EMS_OUT_TO_100HZ_FLAG=1;//开
     EMS_OUT_TO_100HZ_Ci=0;
     if(ZQ>=500)//20Hz
     {
       ZQ=0;
     }
  }
  else if(ZQ_LONG<110000)//5S 20Hz
  {
     EMS_OUT_TO_100HZ_FLAG=0;//关
     if(ZQ>=500)//20Hz
     {
       ZQ=0;
     }
  }
  else if(ZQ_LONG<120000)//1S 20Hz 1000Hz
  {
     EMS_OUT_TO_100HZ_FLAG=1;//开
     EMS_OUT_TO_100HZ_Ci=0;
     if(ZQ>=500)//20Hz
     {
       ZQ=0;
     }
  }
  else if(ZQ_LONG>=130000)//1S 20Hz 1000Hz
  {
      ZQ=0;
      EMS_OUT_TO_100HZ_FLAG=0;//开启
      EMS_OUT_TO_100HZ_Ci=0;
      ZQ_LONG=0;//100000;//屏蔽开头的10S线性升压过程

  }
}


*****************************************/

///////////////////关闭脉冲///////////////////////
void PWM_OFF()
{
  PWM_ON_Ture=0;
  PWM_IN_CI=0;
  Power_PWM_OFF();
  SP1_OFF();//PS1
  SP2_OFF();//PS1
  SP11_OFF();//PS1
  SP22_OFF();//PS1
}

void PWM_init()
{
  PWM_ON_Ture=1;
  EMS_Type_Chang_Flag=1;//开启放电
  ZQ_LONG=0;
  Power_PWM_Ture=0;
  FD_OFF();//关=不需要优化
  PWM_IN_CI=0;
  TYPE1_Ci=0;
}

//升压用的PWM驱动
void timer_pwm_out_init(void)
{
  struct pwm_platform_data pwm_p_data;
  pwm_p_data.pwm_aligned_mode = pwm_edge_aligned;         //边沿对齐
  pwm_p_data.pwm_ch_num = pwm_ch0;                        //通道号
  pwm_p_data.frequency = 20000;                            //20KHz 200
  pwm_p_data.duty = 3000;  //7000                               //占空比20% 0-10000
  pwm_p_data.h_pin = IO_PORTB_06;                         //任意引脚
  pwm_p_data.l_pin = -1;                                  //任意引脚,不需要就填-1
  pwm_p_data.complementary_en = 0;                        //两个引脚的波形, 0: 同步,  1: 互补，互补波形的占空比体现在H引脚上
  mcpwm_init(&pwm_p_data);//已经把关闭通道放到这里面
  Power_PWM_OFF();
}

static void EMS_timer2_Init()
{//定时需要改为200us
    request_irq(IRQ_TIME2_IDX, 2, timer2_isr, 0);
    JL_TIMER2->CNT = 0;
    JL_TIMER2->PRD =600;// prd_cnt;//测试看看定时是不是为120us=720 60=10uS ,240=40us.1200=200us 600=100uS 480=80us
    JL_TIMER2->CON  =(1 << 4) | (1 << 0);//lsb clk 4分频 设置为定时模式
}

//放电500ms后自动关机
void EMS_FD_500ms_TO_OFF(void *priv)
{
  FD_OFF();//关放电
  sys_hi_timer_del(EMS_FD_500ms_TO_OFF_ID);//删除这个定时
  EMS_FD_500ms_TO_OFF_ID=0;
}

//离机检测使用的每隔1秒检测1次
void LJ_PD_1s(void *priv)
{
  if(SYS_Flag==1)//正常
  {
    if(PWM_IN_CI>=5) //已经离机了
    {
      //开启放电
      SYS_Flag=2;//离机状态
      if(EMS_FD_500ms_TO_OFF_ID==0)
      {
        EMS_ALL_OFF();//关闭EMS
        FD_ON();//开放电
        EMS_FD_500ms_TO_OFF_ID=sys_hi_timer_add(NULL, EMS_FD_500ms_TO_OFF, 500);//开启LED强度数显扫描功能
      }
      printf("SYS_Flag ..LJ..Ture.\r\n");
      //sys_hi_timer_add(NULL, EMS_FD_500ms_TO_OFF, 500);//开启LED强度数显扫描功能
    }
  }
}



//初始化强度驱动的PWM
void QD_PWM_Ci_init()
{
	if(PWM_Type<2)
	{
		mcpwm_set_duty(pwm_ch0, 1800);
	}
	else if(PWM_Type<4)
	{
		mcpwm_set_duty(pwm_ch0, 3200);
	}
	else
	{
		mcpwm_set_duty(pwm_ch0, 8000);//4000
	}
}

//强度的初始化
void QD_init(void)
{
    LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QDNEW[PWM_Type][QD_Data_Type];
}


//初始化脉冲功能
void EMS_TEMS_Init()
{
    SYS_Flag=1;
    ZQ_LONG=0;
    PWM_IN_CI=0;
    TYPE1_Ci=0;
    PWM_Type=0;//模式1开始
    PWM_Type_NOW=0;//开始
    PWM_Type0_Delay500ms=0;
    QD_Data_Type=1;//控制强度使用的1
    //mcpwm_set_duty(pwm_ch0, 1000);
    //LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];
    QD_init();//强度的初始化
    timer_pwm_out_init();//这里有4ms的升压波形输出
    QD_PWM_Ci_init();
    ZQ_LONG=0;
    EMS_Type_Chang_Flag=1;//开启放电1S
    EMS_timer2_Init();
    SP1_OFF();//PS1
    SP2_OFF();//PS2
    SP11_OFF();//PS11
    SP22_OFF();//PS22
    FD_OFF();//关=不需要优化
    sys_hi_timer_add(NULL, LJ_PD_1s, 1000);//离机检测使用的1秒进来一次
    LED_ON();
}


//开启蜂鸣器100ms的工作
void Buzzer_ON_100ms(void *priv)
{
    if(Buzzer_Ci!=0)//控制蜂鸣器使用的
    {
        Buzzer_PWM_OFF();
        Buzzer_Ci--;
        if(Buzzer_Ci==0)
        {
           if((SYS_Flag==0)||(SYS_Flag==3))//直接关机或者电量低提醒时需要直接关机
           {
             LED_OFF();//需要关闭LED指示灯
             power_set_soft_poweroff();//关机进入超低功耗
           }
           sys_hi_timer_del(Buzzer_100ms_ID);
           Buzzer_100ms_ID=0;
        }
        else
        {
            if(Buzzer_Ci%2==0)
            {
                Buzzer_PWM_ON();
            }
        }
    }

}

//开启蜂鸣器
void Buzzer_ON(u8 Type)
{//1:一声，2:2声
  if(Type>0)
  {
		Buzzer_Ci=Type*2;
		Buzzer_PWM_OFF();//关蜂鸣器
		if(Buzzer_100ms_ID!=0)
        {
           //停止蜂鸣器工作
           sys_hi_timer_del(Buzzer_100ms_ID);
        }
		Buzzer_PWM_ON();//开蜂鸣器
		Buzzer_100ms_ID=sys_hi_timer_add(NULL, Buzzer_ON_100ms, 100);//0.1秒监测一次，监测充电使用的
  }
}

extern void SYS_to_LED_OFF_Init(void);
extern u8 LED_SHOW_TIMER_DATA,LED_SHOW_TIMER_DELAY_500MS;
//按键的值解码判断使用的
void BT24G_JM(u8 *Data)
{
  u8 LS=1;
  if(Data[0]==0xEE)//收到关机指令的处理
  {
     SYS_to_LED_OFF_Init();
  }
  else
  {
      if((Data[2]>0)&&(Data[2]<=15))//同步遥控器的计时功能的尽量控制误差在1分钟内
      {
        LED_SHOW_TIMER_DATA=Data[2];//重新定义倒计时
        LED_SHOW_TIMER_DELAY_500MS=0;
        printf(">>>BT_DS=%d\n",LED_SHOW_TIMER_DATA);//开机初始化
      }

      if(SYS_Flag==2)//待机模式下不管按哪个键都是开机，按初始状态运行
      {
           EMS_TEMS_Init();//EMS的初始化();
           printf(">>>SYS ON\n");;//开机初始化
      }
      else
      {

        if(Data[0]!=LS_TYPE) //需要改变模式
        {
             LS_TYPE=Data[0];
             ZQ_LONG=0;
             EMS_Type_Chang_Flag=1;//开启放电
             Power_PWM_OFF();
             EMS_ALL_OFF();//关闭EMS
             Power_PWM_Ture=0;
             PWM_Type=Data[0]-1;//模式1到6

             if(PWM_Type==5)
             {
               LS=2;//蜂鸣器2次
             }
             else if(PWM_Type>5)
             {
               PWM_Type=0;
             }

             if(PWM_Type==0)
             {
               PWM_Type_NOW=0;
               PWM_Type0_Delay500ms=0;
             }
             else
             {
               PWM_Type_NOW=PWM_Type;
             }
             QD_Data_Type=Data[1];//强度类型
             QD_PWM_Ci_init();
              QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];
             PWM_init();//初始化脉冲参数
        }
        else
        {
              QD_Data_Type=Data[1];//强度类型
               QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];

            if((QD_Data_Type==1)||(QD_Data_Type==10))
            {
              LS=2;//蜂鸣器2次
            }
        }

        if(Data==72)//测试专用的2022.04.12新加入的为了测试更快
        {
    	    PWM_Type=3;//模式为2此时的电压才可以升到最高
    	    PWM_Type_NOW=1;
            QD_Data_Type=10;
            QD_init();//强度的初始化 LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];
            //QD_Data_Type=16;
            PWM_init();//初始化脉冲参数
            LS=3;//蜂鸣器3次
        }
     }
     Buzzer_ON(LS);//开启蜂鸣器
  }
}



//按键的值解码判断使用的
void KEY_JM(u8 Data)
{
  u8 LS=1;
  if(SYS_Flag==2)//待机模式下不管按哪个键都是开机，按初始状态运行
  {
    if(Data!=1)//正常开机
    {
       EMS_TEMS_Init();//EMS的初始化();
       printf(">>>SYS ON\n");;//开机初始化
    }
  }
  else
  {
    if(Data==2)//模式按键
    {
	   EMS_ALL_OFF();//关闭EMS
	   ZQ_LONG=0;
	   EMS_Type_Chang_Flag=1;//开启1S的放电
       Power_PWM_Ture=0;
       PWM_Type++;
       if(PWM_Type>4)
       {
           PWM_Type=0;
           PWM_Type_NOW=0;
           PWM_Type0_Delay500ms=0;
       }
       else
       {
         PWM_Type_NOW=PWM_Type;
         if(PWM_Type==4)
         {
            LS=2;//蜂鸣器2次
         }
       }
       QD_Data_Type=1;//强度为默认
       QD_PWM_Ci_init();
       QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];
       PWM_init();//初始化脉冲参数
    }
    else if(Data==3)//强度加 强度改为0到5档
    {
     // /*
      if(QD_Data_Type<9)//小于4都是加加
      {
        QD_Data_Type++;//PWM_init();//初始化脉冲参数
      }
      else//等于5
      {
        QD_Data_Type=10;
        LS=2;//蜂鸣器2次
      }
       QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];



      //*/

      /*
      if(QD_Data_Type<4)//小于4都是加加
      {
        QD_Data_Type++;//PWM_init();//初始化脉冲参数
      }
      else//等于5
      {
        QD_Data_Type=5;
        LS=2;//蜂鸣器2次
      }

      if(PWM_Type<2)//脸部的波形
      {
         mcpwm_set_duty(pwm_ch0, MBQD_PWM[QD_Data_Type]);
      }
      else//其他部位的波形
      {
         mcpwm_set_duty(pwm_ch0, QTQD_PWM[QD_Data_Type]);
      }//*/
      //QDLS+=100;//按%1的强度加上去
      //if(QDLS>=10000) QDLS=100;
      //mcpwm_set_duty(pwm_ch0, QDLS);
    }
    else if(Data==4)//强度减
    {
     ///*
      if(QD_Data_Type>2)
      {
        QD_Data_Type--;//PWM_init();//初始化脉冲参数
      }
      else
      {
        QD_Data_Type=1;
        LS=2;//蜂鸣器2次
      }
       QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];

      //*/

      /*
      if(QD_Data_Type>1)
      {
        QD_Data_Type--;//PWM_init();//初始化脉冲参数
      }
      else
      {
        QD_Data_Type=0;
        LS=2;//蜂鸣器2次
      }

      if(PWM_Type<2)//脸部的波形
      {
         mcpwm_set_duty(pwm_ch0, MBQD_PWM[QD_Data_Type]);
      }
      else//其他部位的波形
      {
         mcpwm_set_duty(pwm_ch0, QTQD_PWM[QD_Data_Type]);
      }//*/
      //QDLS+=100;//按%1的强度加上去
      //if(QDLS>=10000) QDLS=100;
      //mcpwm_set_duty(pwm_ch0, QDLS);
      //mcpwm_set_duty(pwm_ch0, ((10000-600)/16)*QD_Data_Type);
    }
    else if(Data==72)//测试专用的2022.04.12新加入的为了测试更快
    {
	    PWM_Type=3;//模式为1此时的电压才可以升到最高
	    PWM_Type_NOW=1;
        //QD_Data_Type=16;
        QD_Data_Type=10;
         QD_init();//强度的初始化LF_POWER_PWM_QD_NEW=LF_POWER_PWM_QD[QD_Data_Type];

        PWM_init();//初始化脉冲参数
        LS=4;//蜂鸣器4次
    }
  }
  Buzzer_ON(LS);//开启蜂鸣器
}

#endif  // _u8_sp_pwm_H


